package deamon

import (
	"fmt"
	"time"

	"api/db"
	"api/loger"
)

// 别动这里
func StartAllDeamon() {
	loger.Loger.Println("finish all deamon")
	ImmediatelyToDo()
	go nightFlash()
	select {}
}

// 每天晚上都要做的
func nightToDo() {
	loger.Loger.Println("新的一天刷新内存", time.Now())
	FlashUserCard()
	RenewActivedClass()
	RenewActivitys()

}

// 与上面这个不同,这个是手动测试模拟晚上刷新的时候调用
func NightToDo() {
	fmt.Println("模拟晚上刷新一次")
	FlashUserCard()
	PrintUserCard()
	RenewActivedClass()
	RenewActivitys()
	PrintCCB()
}

// 程序启动的时候,立即执行
func ImmediatelyToDo() {
	FlashUserCard()
	PrintUserCard()
	InitActivedClass()
	InitActivitys()
	PrintCCB()
}
func Print() (map[int]db.BasicCardInfo, [4]db.OneDayClass) {
	PrintUserCard()
	PrintCCB()
	return UserCard, ccb
}

// 控制每天凌晨3点刷新一次,做一次nightToDo,别动
func nightFlash() {
	now := time.Now()
	nextMidnight := time.Date(now.Year(), now.Month(), now.Day()+1, 3, 0, 0, 0, now.Location())
	duration := nextMidnight.Sub(now)
	time.Sleep(duration)
	// wait and until tomorral night 3 oclock todo once
	nightToDo()
	// and in future use tick looping todo
	for range time.Tick(24 * time.Hour) {
		nightToDo()
	}
}

// 以下这两个尽量别用,用来测试的,本身没有完全测试过,用来将内存中的内容存在数据库,然后取出.
func Storage() {
	StorageClass()
}
func GetStorage() {
	GetStorageClass()
}
